//
//  Statuses.swift
//  SinaMicroBlog
//
//  Created by wxy on 15/9/7.
//  Copyright © 2015年 wxy. All rights reserved.
//

import UIKit

// 微博模型
class Statuses: NSObject {

    // 创建时间
    var created_at: String?
    // 微博ID
    var id: Int = 0
    // 微博信息内容
    var text: String?
    // 微博来源
    var source: String?
    // 配图URL字符串数组
    var pic_urls: [[String: String]]?
    // 用户模型（用户数据字典存放在statuses数组下）
    // 数组下嵌套字典 直接使用kvc 依然是字典 不能转换成数据模型
    var user: User?
    
    /// 如果是原创微博有图，在 pic_urls 数组中记录
    /// 如果是`转发微博`有图，在 retweeted_status.pic_urls 数组中记录
    /// 如果`转发微博`有图 那么 pic_urls 数组中肯定没有图 二选其一
    // 被转发的原创微博对象 和user一样 是字典
    var retweeted_status: Statuses?
    
    init(dict: [String: AnyObject]) {
        
        super.init()
        
        // 调用这个方法的时候一定会调用setValue: forKey这个方法 在这个方法中处理user字典
        setValuesForKeysWithDictionary(dict)
        
    }
    
    override func setValue(value: AnyObject?, forKey key: String) {
        
        // 1.判断key是否是user
        if key == "user" {
            
            // 如果key是user value是字典
            // 调用User的构造函数 字典转模型
            user = User(dict: value as! [String: AnyObject])
            
            // 一定要写 否则还是将user转回字典
            return
        }
        
        if key == "retweeted_status" {
            
            retweeted_status = Statuses(dict: value as! [String: AnyObject])
            
            return
        }
        
        super.setValue(value, forKey: key)
    }
    
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {}
    
    // NSArray & NSDictionary 在swift中极少用 contentOfFile 加载plist才会使用
    // 调试 输出返回数据描述信息
    override var description: String {
        
        let keys = ["created_at", "id", "text", "source", "user", "pic_urls", "retweeted_status"]
        
        return dictionaryWithValuesForKeys(keys).description
    }
}
